#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMenuBar>
#include <QToolBar>
#include <QStatusBar>
#include <QTreeWidget>
#include <QTableView>
#include <QSplitter>
#include <QSqlDatabase>

class SqlEditor;
class DatabaseConnection;
class DataExplorer;
class DataExporter;
class DataImporter;
class TabManager;
class ConnectionManager;
class ERDiagramView;
class PluginManager;
class DatabaseSpecificManager;
class QueryHistoryManager;
class BookmarkManager;
class QSqlQueryModel;
class QSqlTableModel;

struct ConnectionConfig;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    // 为插件提供访问主窗口组件的方法
    QMenu* pluginMenu() const { return m_pluginMenu; }
    QToolBar* pluginToolBar() const { return m_pluginToolBar; }
    QSqlDatabase currentDatabase() const { return currentDatabase; }
    QueryHistoryManager* queryHistoryManager() const { return m_queryHistoryManager; }
    BookmarkManager* bookmarkManager() const { return m_bookmarkManager; }

private slots:
    void connectToDatabase();
    void disconnectFromDatabase();
    void executeQuery(const QString &query);
    void showQueryResults(QSqlQueryModel *model);
    void loadTable(const QString &tableName);
    void refreshData();
    void exportTableData();
    void exportQueryResults();
    void addNewQueryTab();
    void closeCurrentTab();
    void manageConnections();
    void importData();
    void showERDiagram();
    void compareDatabases();
    void generateData();
    void loadPlugins();  // 添加加载插件槽函数
    void showDatabaseInfo();  // 添加显示数据库信息槽函数
    void showQueryHistory();  // 添加显示查询历史槽函数
    void showBookmarks();     // 添加显示书签槽函数

private:
    void createMenus();
    void createToolBars();
    void createStatusBar();
    void setupCentralWidget();
    void setupDatabaseExplorer();
    void showExportDialog(QSqlTableModel *tableModel, QSqlQueryModel *queryModel);
    void showImportDialog();
    void showConnectionDialog();
    void showDiffDialog();
    void showDataGenDialog();
    void showDatabaseInfoDialog();  // 添加显示数据库信息对话框函数
    void showQueryHistoryDialog();  // 添加显示查询历史对话框函数
    void showBookmarkDialog();      // 添加显示书签对话框函数
    
    // Menu bar
    QMenuBar *menuBar;
    QMenu *fileMenu;
    QMenu *databaseMenu;
    QMenu *toolsMenu;
    QMenu *viewMenu;
    QMenu *m_pluginMenu;  // 插件菜单
    QMenu *helpMenu;
    
    // Tool bar
    QToolBar *mainToolBar;
    QToolBar *m_pluginToolBar;  // 插件工具栏
    
    // Status bar
    QStatusBar *statusBar;
    
    // Central widget components
    QSplitter *mainSplitter;
    QTreeWidget *dbExplorerTree;
    // QTableView *dataTable;  // 不再直接使用
    
    // Custom components
    TabManager *tabManager;
    DatabaseConnection *dbConnection;
    DataExplorer *dataExplorer;
    DataExporter *dataExporter;
    DataImporter *dataImporter;
    ConnectionManager *connectionManager;
    ERDiagramView *erDiagramView;
    PluginManager *pluginManager;  // 插件管理器
    DatabaseSpecificManager *dbSpecificManager;  // 数据库特定功能管理器
    QueryHistoryManager *m_queryHistoryManager;  // 查询历史管理器
    BookmarkManager *m_bookmarkManager;          // 书签管理器
    
    // Database
    QSqlDatabase currentDatabase;
};

#endif // MAINWINDOW_H